home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / gemfsc18.lzh / AESSRC18.LZH / AESFUNCS / OBJRBUTL.C < prev    next >
C/C++ Source or Header  |  1992-04-21  |  2KB  |  75 lines

  1. /**************************************************************************
  2.  * OBJRBUTL.C - Functions for working with radio buttons.
  3.  *************************************************************************/
  4.  
  5. #include "gemfast.h"
  6.  
  7. /*-------------------------------------------------------------------------
  8.  * obj_rbfind - Extended radio button finder.
  9.  *-----------------------------------------------------------------------*/
  10.  
  11. int obj_rbfind(tree, parent, rbstate)
  12.     register OBJECT *tree;
  13.     register int    parent;
  14.     register int    rbstate;
  15. {
  16.     register int    kid;
  17.     register OBJECT *pobj;
  18.  
  19.     kid = tree[parent].ob_head;
  20.  
  21.     while ( (kid != parent) && (kid >= R_TREE) ) {
  22.         pobj = &tree[kid];
  23.         if ((pobj->ob_flags & RBUTTON) && (pobj->ob_state & rbstate)) {
  24.             return kid;
  25.         }
  26.         kid = pobj->ob_next;
  27.     }
  28.     return NO_OBJECT;
  29. }
  30.  
  31. /*-------------------------------------------------------------------------
  32.  * obj_parent - Find the parent of a given child object.
  33.  *-----------------------------------------------------------------------*/
  34.  
  35. int obj_parent(tree, curobj)
  36.     register OBJECT *tree;
  37.     register int    curobj;
  38. {
  39.     register int    nxtobj;
  40.                  
  41.     if (curobj == R_TREE)    /* The root of a tree has no parent */
  42.         return R_TREE;
  43.  
  44.     for (;;) {
  45.         nxtobj = tree[curobj].ob_next;
  46.         if (tree[nxtobj].ob_tail == curobj)
  47.             return nxtobj;
  48.         curobj = nxtobj;
  49.     }
  50. }
  51.  
  52. /*-------------------------------------------------------------------------
  53.  * obj_rbselect - Set a radio button to SELECTED, de-sel others in the group.
  54.  *-----------------------------------------------------------------------*/
  55.  
  56. int obj_rbselect(ptree, selobj, state)
  57.     register OBJECT *ptree;
  58.     register int    selobj;
  59.     register int    state;
  60. {
  61.     register int    oldobj;
  62.  
  63.     if (selobj <= R_TREE) {
  64.         return NO_OBJECT;
  65.     }
  66.  
  67.     oldobj = obj_rbfind(ptree, obj_parent(ptree, selobj), state);
  68.     if (oldobj != NO_OBJECT) {
  69.         ptree[oldobj].ob_state &= ~state;
  70.     }
  71.     ptree[selobj].ob_state |= state;
  72.     return oldobj;
  73. }
  74.  
  75.